package com.gosophia.conference.action.common;

import java.util.Date;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;

import com.gosophia.commons.PropertyFilter;
import com.gosophia.commons.PropertyFilter.OperatorType;
import com.gosophia.commons.web.action.BaseAjaxAction;
import com.gosophia.holidayManagement.ws.HolidayManagementWebService;
import com.gosophia.taskManagement.dto.MissionDTO;
import com.gosophia.taskManagement.ws.TaskManagementWebService;

@Scope("prototype")
@Controller("GetConferenceQueryListAction")
public class GetConferenceQueryListAction extends BaseAjaxAction<MissionDTO>{

    private static final long serialVersionUID = 1L;
    @Autowired
    private TaskManagementWebService taskManagementWebService;
    @Autowired
    private HolidayManagementWebService holidayManagementWebService;
    
    private String remind;
    private String warn;
    private String noState;


    @Override
    public String _execute() throws Exception {
           Long missionTypeId = 1009L;
           if(this.searchType==true){
               if("0".equals(remind) && "1".equals(warn) && noState==null){
                   //提醒
                   Date date = holidayManagementWebService.findTheAfterDay(new Date(), 2);
                   PropertyFilter isNull = new PropertyFilter();
                   isNull.setPropertyName("actualEndTime");
                   isNull.setOperator(OperatorType.IS_NULL);
                   PropertyFilter scheduleGE = new PropertyFilter("scheduleEndDate",OperatorType.GE,new Date());
                   PropertyFilter scheduleLE = new PropertyFilter("scheduleEndDate",OperatorType.LE,date);
                   isNull.and(scheduleGE.and(scheduleLE));
                   //预警
                   PropertyFilter p  = new PropertyFilter("actualEndTime",OperatorType.GT,"${scheduleEndDate}");
                   p.setToCharFormat("yyyy-MM-dd");
                   PropertyFilter isNotNull = new PropertyFilter();
                   isNotNull.setPropertyName("actualEndTime");
                   isNotNull.setOperator(OperatorType.IS_NOT_NULL);
                   p.and(isNotNull);
                   PropertyFilter isNull2 = new PropertyFilter();
                   isNull2.setPropertyName("actualEndTime");
                   isNull2.setOperator(OperatorType.IS_NULL);
                   p.or(isNull2.and(new PropertyFilter("scheduleEndDate",OperatorType.LT,new Date())));
                   //或
                   isNull.or(p);
                   propertyFilters.add(isNull);
               }
               if("0".equals(remind) && warn==null && noState==null){
                   Date date = holidayManagementWebService.findTheAfterDay(new Date(), 2);
                   PropertyFilter isNull = new PropertyFilter();
                   isNull.setPropertyName("actualEndTime");
                   isNull.setOperator(OperatorType.IS_NULL);
                   PropertyFilter scheduleGE = new PropertyFilter("scheduleEndDate",OperatorType.GE,new Date());
                   PropertyFilter scheduleLE = new PropertyFilter("scheduleEndDate",OperatorType.LE,date);
                   isNull.and(scheduleGE.and(scheduleLE));
                   propertyFilters.add(isNull);
               }
               if("1".equals(warn) && remind==null && noState==null){
                   PropertyFilter p  = new PropertyFilter("actualEndTime",OperatorType.GT,"${scheduleEndDate}");
                   p.setToCharFormat("yyyy-MM-dd");
                   PropertyFilter isNotNull = new PropertyFilter();
                   isNotNull.setPropertyName("actualEndTime");
                   isNotNull.setOperator(OperatorType.IS_NOT_NULL);
                   p.and(isNotNull);
                   PropertyFilter isNull2 = new PropertyFilter();
                   isNull2.setPropertyName("actualEndTime");
                   isNull2.setOperator(OperatorType.IS_NULL);
                   isNull2.and(new PropertyFilter("scheduleEndDate",OperatorType.LT,new Date()));
                   p.or(isNull2);
                   propertyFilters.add(p);
               }
               page = taskManagementWebService.findRelationMissionAdvancedByPage(missionTypeId, page.getPageSize(), page.getPageNo(), propertyFilters, orderConditions);
           }else if(this.searchType==false){
               if(searchString!=null && !"".equals(searchString)){
                   searchString = searchString.trim();
               }
               page = taskManagementWebService.findRelationMissionSimpleByPage(missionTypeId, searchString, page.getPageSize(), page.getPageNo(), orderConditions, propertyFilters);

           }
           
           if(page.getResult().size()==0){
               super.getRequestResult().setRsltCode("1");
           }else{
               super.getRequestResult().setRsltCode("0");
           }
           return SUCCESS;
    }


    public String getRemind() {
        return remind;
    }

    public void setRemind(String remind) {
        this.remind = remind;
    }

    public String getWarn() {
        return warn;
    }

    public void setWarn(String warn) {
        this.warn = warn;
    }

    public String getNoState() {
        return noState;
    }

    public void setNoState(String noState) {
        this.noState = noState;
    }
    @Override
    public MissionDTO getDetailData() {
        // TODO Auto-generated method stub
        return null;
    }

}
